/*
 * CCVisu is a tool for visual graph clustering
 * and general force-directed graph layout.
 * This file is part of CCVisu.
 *
 * Copyright (C) 2005-2011  Dirk Beyer
 *
 * CCVisu is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * CCVisu is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with CCVisu; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Please find the GNU Lesser General Public License in file
 * license_lgpl.txt or http://www.gnu.org/licenses/lgpl.txt
 *
 * Dirk Beyer    (firstname.lastname@uni-passau.de)
 * University of Passau, Bavaria, Germany
 */
package org.sosy_lab.ccvisu.writers;

public enum OutputFormat {
  RSF("rsf", "Relational Standard Files", "Graph (relation) in Relational Standard Format (RSF)."),

  CRSF("rsf", "Relational Standard Files containing Clusters", "Graph clustering in Relational Standard Format (RSF)."),

  LAY("lay", "Layout Files", "Graph layout in textual format."),

  SVG("svg", "SVG Files", "Graph layout in SVG format."),

  VRML("wrl", "VRML Files", "Graph layout in VRML format."),

  GML("gml", "GraphML Files", "Graph in GraphML format."),

  GXL("gxl", "GXL Files", "Graph in GXL format."),

  DISP("disp", "Screen Output", "Display graph layout on screen."),

  STATS("stats", "Statistics Files", "Statistics in textual format."),

  CALLDEP("rsf", "Calldep output", "Output of the calldep algorithm."),

  NULL("null", "Null output", "Null output");

  private String fileExtension = "";
  private String fileType      = "";
  private String description   = "";

  OutputFormat(String fileExtension, String fileType, String description) {
    assert(fileExtension != null && fileType != null && description != null
        && !fileExtension.equals("") && !fileType.equals("")
        && !description.equals(""));

    this.fileExtension = fileExtension;
    this.fileType = fileType;
    this.description = description;
  }

  /**
   * @return the fileExtension
   */
  public String getFileExtension() {
    return '.' + fileExtension;
  }

  /**
   * @return the formatName
   */
  public String getFileType() {
    return fileType;
  }

  /**
   * @return the description of the output format
   */
  public String getDescription() {
    return description;
  }

  public static OutputFormat getOutFormatByExtension(String fileExtension) {
    for (OutputFormat outputFormat : values()) {
      if ((fileExtension).equalsIgnoreCase(outputFormat.getFileExtension())) {
        return outputFormat;
      }
    }
    return OutputFormat.NULL;
  }
}
